package com.ruoyi.system.listener;


import com.ruoyi.common.constant.WorkFlowConstants;
import com.ruoyi.system.utils.SpringContextHolder;
import lombok.extern.slf4j.Slf4j;
import org.flowable.engine.RuntimeService;
import org.flowable.engine.TaskService;
import org.flowable.engine.delegate.TaskListener;
import org.flowable.task.service.delegate.DelegateTask;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;


/**
 * 任务监听器
 * create：在任务被创建时触发。
 * assignment：在任务被分配给用户或组时触发。
 * complete：在任务完成时触发。
 * delete：经测试会在任务完成时触发。
 * 监听执行人是否为空： create触发
 * @desc 精髓代码实现2 ,看下如何实现的审批人为空自动通过的逻辑
 */
@Component
@Slf4j
public class TaskCreatedListener implements TaskListener {
    @Resource
    private TaskService taskService;
    @Resource
    private RuntimeService runtimeService;

    @Override
    public void notify(DelegateTask delegateTask) {
        log.info(delegateTask.getEventName());
        log.info(delegateTask.getTaskDefinitionKey());
        if(WorkFlowConstants.DEFAULT_NULL_ASSIGNEE.equals(delegateTask.getAssignee())){
            Object autoRefuse = delegateTask.getVariable(WorkFlowConstants.AUTO_REFUSE_STR);
            if(autoRefuse==null){
                //添加审批意见
                taskService.addComment(delegateTask.getId(),delegateTask.getProcessInstanceId(),WorkFlowConstants.OPINION_COMMENT,"审批人为空,自动通过");
                //完成任务
                taskService.complete(delegateTask.getId());
            }
            else{
                taskService.addComment(delegateTask.getId(),delegateTask.getProcessInstanceId(),WorkFlowConstants.OPINION_COMMENT,"审批人为空,自动驳回");
                //驳回
                runtimeService.deleteProcessInstance(delegateTask.getProcessInstanceId(),"审批人为空,自动驳回");
            }
        }
    }
}
